package com.fanxuankai.boot.mqbroker.producer;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author fanxuankai
 */
@Mapper
public interface MsgSendMapper extends BaseMapper<MsgSend> {
    /**
     * 重试
     *
     * @param timeout        超时时间 s
     * @param limit          限制数量
     * @param externalEvents 外部事件
     * @return code 列表
     */
    List<Long> lost(@Param("timeout") long timeout,
                    @Param("limit") int limit,
                    @Param("externalEvents") Set<String> externalEvents);

    /**
     * 重试
     *
     * @param timeout        超时时间 s
     * @param limit          限制数量
     * @param schema         数据库
     * @param externalEvents 外部事件
     * @return code 列表
     */
    List<Long> lostExternal(@Param("timeout") long timeout,
                            @Param("limit") int limit,
                            @Param("schema") String schema,
                            @Param("externalEvents") Set<String> externalEvents);

    /**
     * 清理
     *
     * @param expire         失效时间 s
     * @param externalEvents 外部事件
     * @param excludeEvents  排除事件
     */
    void clear(@Param("expire") long expire,
               @Param("externalEvents") Set<String> externalEvents,
               @Param("excludeEvents") Set<String> excludeEvents);

    /**
     * 清理
     *
     * @param expire         失效时间 s
     * @param schema         数据库
     * @param externalEvents 外部事件
     * @param excludeEvents  排除事件
     */
    void clearExternal(@Param("expire") long expire,
                       @Param("schema") String schema,
                       @Param("externalEvents") Set<String> externalEvents,
                       @Param("excludeEvents") Set<String> excludeEvents);
}
